/**
 * @file ProtocolDef.h
 * @brief 通信协议定义
 * @author Your Name
 * @date 2025-03-30
 */

#ifndef PROTOCOLDEF_H
#define PROTOCOLDEF_H

#include <cstdint>

namespace Protocol {

// 帧结构常量定义
constexpr uint16_t FRAME_HEADER = 0xAA55;  ///< 帧头固定值
constexpr uint8_t HEADER_LEN = 2;          ///< 帧头长度(字节)
constexpr uint8_t CMD_LEN = 1;             ///< 命令码长度(字节)
constexpr uint8_t LEN_FIELD_LEN = 1;       ///< 长度字段长度(字节)
constexpr uint8_t CHECKSUM_LEN = 1;        ///< 校验位长度(字节)
constexpr uint8_t FRAME_MIN_LEN = HEADER_LEN + CMD_LEN + LEN_FIELD_LEN + CHECKSUM_LEN; ///< 最小帧长度

// 命令码定义
enum CommandType : uint8_t {
    CMD_DEVICE_CONTROL = 0x01,     ///< 设备控制命令 (Qt→STM32)
    CMD_TIME_SYNC = 0x02,          ///< 时间同步 (Qt→STM32)
    CMD_ENV_DATA = 0x10,           ///< 环境数据上报 (STM32→Qt)
    CMD_RFID_REPORT = 0x11,        ///< RFID考勤上报 (STM32→Qt)
    CMD_HEARTBEAT = 0x12,          ///< 心跳包 (STM32→Qt)
    CMD_ERROR_RESP = 0xF0          ///< 错误应答 (双向)
};

// 错误码定义
enum ErrorCode : uint8_t {
    ERR_CHECKSUM = 0x01,           ///< 校验错误
    ERR_LENGTH = 0x02,             ///< 长度不符
    ERR_COMMAND = 0x03,            ///< 命令不支持
    ERR_TIMEOUT = 0x04,            ///< 通信超时
    ERR_PARAM = 0x05               ///< 参数错误
};

// 设备控制位定义
enum ControlBit : uint8_t {
    CTRL_RELAY1 = 0x01,            ///< 继电器1控制位
    CTRL_RELAY2 = 0x02,            ///< 继电器2控制位
    CTRL_LED = 0x04                ///< 指示灯控制位
};

// 状态码位定义
enum StatusBit : uint8_t {
    STATUS_LATE = 0x01,            ///< 迟到标志位
    STATUS_EARLY = 0x02,           ///< 早退标志位
    STATUS_ABSENT = 0x04           ///< 缺勤标志位
};

} // namespace Protocol

#endif // PROTOCOLDEF_H
